/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


package gui.Mantenimiento;

import delegate.GestionDelegate;
import controlacciones.ejb3.entity.TbArea;
import controlacciones.ejb3.entity.TbClasificacionAccion;
import controlacciones.ejb3.entity.TbTipoAccion;
import controlacciones.ejb3.entity.TbTipoAccionClasificacionAccionArea;
import controlacciones.ejb3.entity.TbTipoAccionClasificacionAccionAreaPK;
import controlacciones.ejb3.pojo.TableBeanBinding_DatosClasificacionTipoAccionArea;
import helper.JP_Utiles_PanelModelo;
import helper.JP_Utiles_PanelBotonesMantenimiento;
import helper.Utiles_MensajesDialogo;
import java.awt.BorderLayout;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jdesktop.application.Action;
import org.jdesktop.application.Task;
import java.util.ArrayList;
import java.util.List;
import javax.swing.Timer;
import javax.swing.Icon;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import org.jdesktop.beansbinding.AbstractBindingListener;
import org.jdesktop.beansbinding.Binding;
import org.jdesktop.beansbinding.PropertyStateEvent;

/**
 *
 * 
 */
public class JP_MantenimientoTbTipoAccionClasificacionAccionArea extends JP_Utiles_PanelModelo {
    

    /** Creates new form JP_RegistraAccion */
    public JP_MantenimientoTbTipoAccionClasificacionAccionArea() {
        inicializaComponentes();
    }

    private void inicializaComponentes(){
        initComponents();
        //Panel de Operaciones
        ArrayList alBotones = new ArrayList( 1 );
        alBotones.add( new Integer( JP_Utiles_PanelBotonesMantenimiento.BOTON_NUEVO ) );
        alBotones.add( new Integer( JP_Utiles_PanelBotonesMantenimiento.BOTON_MODIFICAR ) );
        alBotones.add( new Integer( JP_Utiles_PanelBotonesMantenimiento.BOTON_ELIMINAR ) );
        alBotones.add( new Integer( JP_Utiles_PanelBotonesMantenimiento.BOTON_GUARDAR ) );
        alBotones.add( new Integer( JP_Utiles_PanelBotonesMantenimiento.BOTON_DESHACER ) );
        alBotones.add( new Integer( JP_Utiles_PanelBotonesMantenimiento.BOTON_CERRAR ) );

        jp_ope = new JP_Utiles_PanelBotonesMantenimiento( this, alBotones );
        jp_Operaciones.setLayout( new BorderLayout() );
        jp_Operaciones.add( jp_ope, BorderLayout.CENTER );

        btnBuscar.setFont(new java.awt.Font("Arial", 1, 12)); // NOI18N
        btnBuscar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/fife/plaf/Office2003/find.gif"))); // NOI18N
        btnBuscar.setText("Buscar");

        // tracking table selection
        tabla.getSelectionModel().addListSelectionListener(
            new ListSelectionListener() {
                public void valueChanged(ListSelectionEvent e) {
                    firePropertyChange("recordSelected", !isRecordSelected(), isRecordSelected());
                }
            });

        // tracking changes to save
        bindingGroup.addBindingListener(new AbstractBindingListener() {
            @Override
            public void targetChanged(Binding binding, PropertyStateEvent event) {
                // save action observes saveNeeded property
                setSaveNeeded(true);
            }
        });
        /********************************/        
        this.cargaComboArea();
        this.cargaComboTbClasificacionAccion();
        this.cargaComboTipoAccion();
        tbTipoAccion = null;
        refrescar();
        habilitarComponentes( false );
        inicializarBotones();
    }   

    public void inicializaReferencias(){
    }

    private void cargaTabla( TbTipoAccion tbTipoAccion ){        
        try {
            listaDatos = GestionDelegate.getInstance().getListaClasificacionTipoAccionArea( tbTipoAccion );
        } catch (Exception ex) {
            Logger.getLogger( JP_MantenimientoTbTipoAccionClasificacionAccionArea.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println( "Error al cargar la lista de Tipos de Acciones" );
        }
        try{

            bindingGroup = new org.jdesktop.beansbinding.BindingGroup();
            jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, listaDatos, tabla);
            org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${codTipoAccion}"));
            columnBinding.setColumnName("Cod Tipo Accion");
            columnBinding.setColumnClass(Integer.class);
            columnBinding.setEditable( false );
            columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${desripcion_TipoAccion}"));
            columnBinding.setColumnName("Tipo de Accion");
            columnBinding.setColumnClass(String.class);
            columnBinding.setEditable( false );
            columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${desripcion_ClasificacionAccion}"));
            columnBinding.setColumnName("Clasificacion");
            columnBinding.setColumnClass(String.class);
            columnBinding.setEditable( false );
            columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${desripcion_Area}"));
            columnBinding.setColumnName("Area");
            columnBinding.setColumnClass(String.class);
            columnBinding.setEditable( false );
            bindingGroup.addBinding(jTableBinding);

            bindingGroup.bind();
            if(listaDatos.size() > 0 )
                this.tabla.setRowSelectionInterval(0, 0);
            }catch( Exception e ){
                Logger.getLogger( JP_MantenimientoTbTipoAccionClasificacionAccionArea.class.getName()).log(Level.SEVERE, null, e);
                System.out.println( "Error en el binding" );
            }
    }

    private void cargaComboArea(){
        List listTbArea = null; // seteamos variable local
        List listaArea = comboBeanBindingArea1.getLista();
        listaArea.clear();
        try {
            listTbArea = GestionDelegate.getInstance().getListaArea();
        } catch (Exception e) {
            System.out.println( "Error en gestionDelegate.getListaArea()" );
            return;
        }
        this.comboBeanBindingArea1.setLista(listTbArea);
        this.bindingGroup.bind();
        this.cmbArea.updateUI();
    }

    private void cargaComboTipoAccion(){
        List listTbTipoAccion = null; // seteamos variable local
        List listaTipoAccion =  comboBeanBindingTbTipoAccion1.getLista();
        listaTipoAccion.clear();
        try {
            listTbTipoAccion =  GestionDelegate.getInstance().getListaTbTipoAccion();
            this.comboBeanBindingTbTipoAccion1.setLista(listTbTipoAccion);
            this.bindingGroup.bind();
            this.cmbTipoAccion.updateUI();
        } catch (Exception e) {
            System.out.println( "Error en cargaComboTipoAccion() " + e.getMessage() );
            return;
        }
    }

     private void cargaComboTbClasificacionAccion(){
        List listTbClasificacionAccion = null; // seteamos variable local
        List listClasificacionAccion =  comboBeanBindingTbClasificacionAccion1.getLista();
        listClasificacionAccion.clear();
        try {
            listTbClasificacionAccion =  GestionDelegate.getInstance().getListaTbClasificacionAccion();
            this.comboBeanBindingTbClasificacionAccion1.setLista(listTbClasificacionAccion);
            this.bindingGroup.bind();
            this.cmbClasificacionAccion.updateUI();
        } catch (Exception e) {
            System.out.println( "Error en cargaComboTbClasificacionAccion() " + e.getMessage() );
            return;
        }
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always re-generated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {
        bindingGroup = new org.jdesktop.beansbinding.BindingGroup();

        comboBeanBindingArea1 = new beansbinding.ComboBeanBindingArea();
        comboBeanBindingTbClasificacionAccion1 = new beansbinding.ComboBeanBindingTbClasificacionAccion();
        comboBeanBindingTbTipoAccion1 = new beansbinding.ComboBeanBindingTbTipoAccion();
        jp_Operaciones = new javax.swing.JPanel();
        masterScrollPane = new javax.swing.JScrollPane();
        tabla = new javax.swing.JTable();
        jp_DatosUsuario = new javax.swing.JPanel();
        codCatAccionLabel = new javax.swing.JLabel();
        cmbClasificacionAccion = new javax.swing.JComboBox();
        cmbTipoAccion = new javax.swing.JComboBox();
        cmbArea = new javax.swing.JComboBox();
        tiempoRptaLimiteLabel1 = new javax.swing.JLabel();
        AreaLabel = new javax.swing.JLabel();
        jPanel1 = new javax.swing.JPanel();
        logUserLabel1 = new javax.swing.JLabel();
        textbuscar = new javax.swing.JTextField();
        btnBuscar = new javax.swing.JButton();

        setName("Form"); // NOI18N

        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(controlaccionescomercial.ControlAccionesComercialApp.class).getContext().getResourceMap(JP_MantenimientoTbTipoAccionClasificacionAccionArea.class);
        jp_Operaciones.setBorder(javax.swing.BorderFactory.createTitledBorder(resourceMap.getString("jp_Operaciones.border.title"))); // NOI18N
        jp_Operaciones.setName("jp_Operaciones"); // NOI18N

        javax.swing.GroupLayout jp_OperacionesLayout = new javax.swing.GroupLayout(jp_Operaciones);
        jp_Operaciones.setLayout(jp_OperacionesLayout);
        jp_OperacionesLayout.setHorizontalGroup(
            jp_OperacionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 530, Short.MAX_VALUE)
        );
        jp_OperacionesLayout.setVerticalGroup(
            jp_OperacionesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 40, Short.MAX_VALUE)
        );

        masterScrollPane.setName("masterScrollPane"); // NOI18N

        tabla.setName("tabla"); // NOI18N
        tabla.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        tabla.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaMouseClicked(evt);
            }
        });
        tabla.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                tablaKeyPressed(evt);
            }
            public void keyReleased(java.awt.event.KeyEvent evt) {
                tablaKeyReleased(evt);
            }
        });
        masterScrollPane.setViewportView(tabla);

        jp_DatosUsuario.setBorder(javax.swing.BorderFactory.createTitledBorder(resourceMap.getString("jp_DatosUsuario.border.title"))); // NOI18N
        jp_DatosUsuario.setName("jp_DatosUsuario"); // NOI18N

        codCatAccionLabel.setText(resourceMap.getString("codCatAccionLabel.text")); // NOI18N
        codCatAccionLabel.setName("codCatAccionLabel"); // NOI18N

        cmbClasificacionAccion.setEnabled(false);
        cmbClasificacionAccion.setName("cmbClasificacionAccion"); // NOI18N

        org.jdesktop.beansbinding.ELProperty eLProperty = org.jdesktop.beansbinding.ELProperty.create("${lista}");
        org.jdesktop.swingbinding.JComboBoxBinding jComboBoxBinding = org.jdesktop.swingbinding.SwingBindings.createJComboBoxBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, comboBeanBindingTbClasificacionAccion1, eLProperty, cmbClasificacionAccion);
        bindingGroup.addBinding(jComboBoxBinding);

        cmbClasificacionAccion.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                cmbClasificacionAccionKeyPressed(evt);
            }
        });

        cmbTipoAccion.setEnabled(false);
        cmbTipoAccion.setName("cmbTipoAccion"); // NOI18N

        eLProperty = org.jdesktop.beansbinding.ELProperty.create("${lista}");
        jComboBoxBinding = org.jdesktop.swingbinding.SwingBindings.createJComboBoxBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, comboBeanBindingTbTipoAccion1, eLProperty, cmbTipoAccion);
        bindingGroup.addBinding(jComboBoxBinding);

        cmbTipoAccion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbTipoAccionActionPerformed(evt);
            }
        });

        cmbArea.setEnabled(false);
        cmbArea.setName("cmbArea"); // NOI18N

        eLProperty = org.jdesktop.beansbinding.ELProperty.create("${lista}");
        jComboBoxBinding = org.jdesktop.swingbinding.SwingBindings.createJComboBoxBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, comboBeanBindingArea1, eLProperty, cmbArea);
        bindingGroup.addBinding(jComboBoxBinding);

        cmbArea.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbAreaActionPerformed(evt);
            }
        });

        tiempoRptaLimiteLabel1.setText(resourceMap.getString("tiempoRptaLimiteLabel1.text")); // NOI18N
        tiempoRptaLimiteLabel1.setName("tiempoRptaLimiteLabel1"); // NOI18N

        AreaLabel.setText(resourceMap.getString("AreaLabel.text")); // NOI18N
        AreaLabel.setName("AreaLabel"); // NOI18N

        javax.swing.GroupLayout jp_DatosUsuarioLayout = new javax.swing.GroupLayout(jp_DatosUsuario);
        jp_DatosUsuario.setLayout(jp_DatosUsuarioLayout);
        jp_DatosUsuarioLayout.setHorizontalGroup(
            jp_DatosUsuarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jp_DatosUsuarioLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jp_DatosUsuarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(codCatAccionLabel)
                    .addComponent(tiempoRptaLimiteLabel1)
                    .addComponent(AreaLabel))
                .addGap(21, 21, 21)
                .addGroup(jp_DatosUsuarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(cmbTipoAccion, javax.swing.GroupLayout.Alignment.TRAILING, 0, 371, Short.MAX_VALUE)
                    .addComponent(cmbClasificacionAccion, 0, 371, Short.MAX_VALUE)
                    .addComponent(cmbArea, javax.swing.GroupLayout.PREFERRED_SIZE, 158, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
        jp_DatosUsuarioLayout.setVerticalGroup(
            jp_DatosUsuarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jp_DatosUsuarioLayout.createSequentialGroup()
                .addGroup(jp_DatosUsuarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(AreaLabel)
                    .addComponent(cmbArea, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jp_DatosUsuarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(cmbTipoAccion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(tiempoRptaLimiteLabel1))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jp_DatosUsuarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(codCatAccionLabel)
                    .addComponent(cmbClasificacionAccion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(resourceMap.getString("jPanel1.border.title"))); // NOI18N
        jPanel1.setName("jPanel1"); // NOI18N

        logUserLabel1.setText(resourceMap.getString("logUserLabel1.text")); // NOI18N
        logUserLabel1.setName("logUserLabel1"); // NOI18N

        javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(controlaccionescomercial.ControlAccionesComercialApp.class).getContext().getActionMap(JP_MantenimientoTbTipoAccionClasificacionAccionArea.class, this);
        textbuscar.setAction(actionMap.get("buscar")); // NOI18N
        textbuscar.setName("textbuscar"); // NOI18N

        btnBuscar.setAction(actionMap.get("buscar")); // NOI18N
        btnBuscar.setText(resourceMap.getString("btnBuscar.text")); // NOI18N
        btnBuscar.setName("btnBuscar"); // NOI18N

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(logUserLabel1)
                .addGap(36, 36, 36)
                .addComponent(textbuscar, javax.swing.GroupLayout.DEFAULT_SIZE, 278, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(btnBuscar, javax.swing.GroupLayout.PREFERRED_SIZE, 113, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(logUserLabel1)
                    .addComponent(textbuscar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnBuscar))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jp_DatosUsuario, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(masterScrollPane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 542, Short.MAX_VALUE)
                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jp_Operaciones, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(masterScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 141, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jp_DatosUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jp_Operaciones, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        bindingGroup.bind();
    }// </editor-fold>//GEN-END:initComponents

    private void tablaMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaMouseClicked
        // TODO add your handling code here:
        eventoSeleccionTable();
    }//GEN-LAST:event_tablaMouseClicked

    private void tablaKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tablaKeyPressed
        // TODO add your handling code here:
        
    }//GEN-LAST:event_tablaKeyPressed

    private void tablaKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tablaKeyReleased
        // TODO add your handling code here:
        eventoSeleccionTable();
    }//GEN-LAST:event_tablaKeyReleased

    private void cmbClasificacionAccionKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_cmbClasificacionAccionKeyPressed
        if(evt.getKeyCode()== evt.VK_ENTER){
            this.jp_ope.getBtnGuardar().requestFocus();
        }
}//GEN-LAST:event_cmbClasificacionAccionKeyPressed

    private void cmbTipoAccionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbTipoAccionActionPerformed

}//GEN-LAST:event_cmbTipoAccionActionPerformed

    private void cmbAreaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbAreaActionPerformed
        
}//GEN-LAST:event_cmbAreaActionPerformed

    private void eventoSeleccionTable(){
        try{
            int selected = this.tabla.getSelectedRow();
            if( selected > -1 ){
                TableBeanBinding_DatosClasificacionTipoAccionArea t = this.listaDatos.get(tabla.convertRowIndexToModel(selected));

                TbArea tbArea =  new  TbArea();
                tbArea.setCodArea( t.getCodArea() );
                tbArea.setDescripcion( t.getDesripcion_Area() );

                TbClasificacionAccion tbClasificacionAccion = new TbClasificacionAccion();
                tbClasificacionAccion.setCodClasificacionAccion( t.getCodClasificacionAccion() );
                tbClasificacionAccion.setDesripcion( t.getDesripcion_ClasificacionAccion() );

                tbTipoAccion =  new TbTipoAccion();
                tbTipoAccion.setCodTipoAccion( t.getCodTipoAccion() );
                tbTipoAccion.setDescripcion( t.getDesripcion_TipoAccion() );

                TbTipoAccionClasificacionAccionAreaPK tbTipoAccionClasificacionAccionAreaPK = new TbTipoAccionClasificacionAccionAreaPK();
                tbTipoAccionClasificacionAccionAreaPK.setCodArea( tbArea.getCodArea() );
                tbTipoAccionClasificacionAccionAreaPK.setCodClasificacionAccion( tbClasificacionAccion.getCodClasificacionAccion() );
                tbTipoAccionClasificacionAccionAreaPK.setCodTipoAccion( tbTipoAccion.getCodTipoAccion() );

                tbTipoAccionClasificacionAccionArea = new TbTipoAccionClasificacionAccionArea();
                tbTipoAccionClasificacionAccionArea.setTbArea(tbArea);
                tbTipoAccionClasificacionAccionArea.setTbClasificacionAccion(tbClasificacionAccion);
                tbTipoAccionClasificacionAccionArea.setTbTipoAccion(tbTipoAccion);
                tbTipoAccionClasificacionAccionArea.setTbTipoAccionClasificacionAccionAreaPK(tbTipoAccionClasificacionAccionAreaPK);

                this.cmbArea.setSelectedItem(tbArea);
                this.cmbClasificacionAccion.setSelectedItem(tbClasificacionAccion);
                this.cmbTipoAccion.setSelectedItem( tbTipoAccion );

                this.ind = 1;

                jp_ope.getBtnNuevo().setEnabled( true );
                jp_ope.getBtnModificar().setEnabled( true );
                jp_ope.getBtnEliminar().setEnabled( true );
                jp_ope.getBtnGuardar().setEnabled( false );
                jp_ope.getBtnDeshacer().setEnabled( false );
                jp_ope.getBtnCerrar().setEnabled( true );
            }
        }catch( Exception ex ){
            System.out.println( "Error: eventoSeleccionTable " + ex.getMessage()  );
            ex.printStackTrace();
        }
    }

    private void limpiarComponentes(){
        this.cmbArea.setSelectedIndex( -1 );
        this.cmbClasificacionAccion.setSelectedIndex( -1 );
        //this.cmbTipoAccion.setSelectedIndex( -1 );
    }

    private void habilitarComponentes( boolean ban ){
        this.cmbArea.setEnabled(ban);
        this.cmbClasificacionAccion.setEnabled(ban);
        //this.cmbTipoAccion.setEnabled(ban);
    }
    
    private void habilitarBotones( boolean ban ){
        jp_ope.getBtnNuevo().setEnabled( ban );
        jp_ope.getBtnModificar().setEnabled( ban);
        jp_ope.getBtnEliminar().setEnabled( ban );
        jp_ope.getBtnGuardar().setEnabled( ban );
        jp_ope.getBtnDeshacer().setEnabled( ban);
        jp_ope.getBtnCerrar().setEnabled( !ban );
    }

    public boolean isSaveNeeded() {
        return saveNeeded;
    }

    private void setSaveNeeded(boolean saveNeeded) {
        if (saveNeeded != this.saveNeeded) {
            this.saveNeeded = saveNeeded;
            firePropertyChange("saveNeeded", !saveNeeded, saveNeeded);
        }
    }

    public boolean isRecordSelected() {
        return tabla.getSelectedRow() != -1;
    }
    
    @Action
    public Task buscar() {
        this.buscarDatos();
        return null;
    }

    @Override
    public Task nuevo(){
        //return new Guarda(org.jdesktop.application.Application.getInstance(seguridad_cliente.Seguridad_ClienteApp.class));
        this.limpiarComponentes();
        this.habilitarComponentes( true );
        this.cmbArea.requestFocus();
        this.cmbTipoAccion.setEnabled( false );
        setSaveNeeded(true);
        jp_ope.getBtnNuevo().setEnabled( false );
        jp_ope.getBtnModificar().setEnabled( false );
        jp_ope.getBtnEliminar().setEnabled( false );
        jp_ope.getBtnGuardar().setEnabled(true);
        jp_ope.getBtnDeshacer().setEnabled( true );
        jp_ope.getBtnCerrar().setEnabled( true );
        this.ind = 0;
        return null;
    }

    @Override
    public Task modificar(){
        //return new Guarda(org.jdesktop.application.Application.getInstance(seguridad_cliente.Seguridad_ClienteApp.class));
        this.cmbArea.requestFocus();
        this.cmbArea.setEnabled( true );
        this.cmbClasificacionAccion.setEnabled( true );
        this.cmbTipoAccion.setEnabled( false );
        this.ind = 1;
        jp_ope.getBtnNuevo().setEnabled( false );
        jp_ope.getBtnModificar().setEnabled( false );
        jp_ope.getBtnEliminar().setEnabled( false );
        jp_ope.getBtnGuardar().setEnabled(true);
        jp_ope.getBtnDeshacer().setEnabled( true );
        jp_ope.getBtnCerrar().setEnabled( true );
        return null;
    }

    @Override
    public Task eliminar(){
        return new Elimina(org.jdesktop.application.Application.getInstance(controlaccionescomercial.ControlAccionesComercialApp.class));
    }

    @Override
    public Task guardar() {
        return new Guarda(org.jdesktop.application.Application.getInstance(controlaccionescomercial.ControlAccionesComercialApp.class));
    }
    
    @Override
    public Task deshacer() {
       limpiarComponentes();
       this.habilitarComponentes( false );
       this.inicializarBotones();
       eventoSeleccionTable();
       return null;
    }

    @Override
    public Task cerrar() {
        this.cerrarPadre();
        return null;
    }
    
    private class Guarda extends org.jdesktop.application.Task<Object, Void> {
        Guarda(org.jdesktop.application.Application app) {
            super(app);
        }
        @SuppressWarnings("unchecked")
        @Override protected Object doInBackground() {
            try {
                setProgress(0, 0, 4);
                setMessage("Verificando datos");
                setProgress(1, 0, 4);
                //entityManager.getTransaction().rollback();
                habilitarBotones( false );
                boolean ban = verificarDatos();
                boolean resultado = false;
                Thread.sleep(1000L); // remove for real app
                setProgress(2, 0, 4);
                setMessage("Grabando en la Base de Datos");
                if(ban){
                     try{
                        if( ind == 0 ){
                            insertaTipoAccionClasificacionAccionArea(tbTipoAccionClasificacionAccionArea);
                            System.out.println( "insertaTipoAccionClasificacionAccionArea" );
                        }else{
                            modificaTipoAccionClasificacionAccionArea(tbTipoAccionClasificacionAccionArea);
                            System.out.println( "modificaTipoAccionClasificacionAccionArea" );
                        }
                        resultado = true;
                    }catch( Exception ex ){
                        resultado = false;
                        jp_ope.getBtnGuardar().setEnabled( true );
                        ex.printStackTrace();
                        Utiles_MensajesDialogo.mensajeFracaso( "Error" + ex.getMessage() );
                    }
                }else{
                    resultado = false;
                    Utiles_MensajesDialogo.mensajeFracaso( "Datos inválidos" );
                    jp_ope.getBtnGuardar().setEnabled( true );
                }
                //entityManager.getTransaction().begin();
                Thread.sleep(500L); // remove for real app
                setProgress(3, 0, 4);

                setMessage("Refrescar Data");
                if( resultado ){
                    limpiarComponentes();
                    habilitarComponentes(false);
                    cargaTabla(tbTipoAccion);
                    Thread.sleep(1300L); // remove for real app
                    setProgress(4, 0, 4);
                    Utiles_MensajesDialogo.mensajeExito();
                    inicializarBotones( );
                    eventoSeleccionTable();
                }
                Thread.sleep(150L); // remove for real app

            } catch(InterruptedException ignore) { }
            
            return null;  // return your result
        }
        @Override protected void succeeded(Object result) {
            
        }
        @Override protected void finished() {
            setSaveNeeded(false);
        }
    }
    
     private boolean verificarDatos( ){

         TbArea tbArea = null;
         TbClasificacionAccion tbClasificacionAccion = null;
         tbTipoAccion = null;

         try{
              tbArea = ( TbArea )this.cmbArea.getSelectedItem();
             if( tbArea == null){
                 return false;
             }
         }catch( Exception e ){
             return false;
         }

         try{
              tbClasificacionAccion = (TbClasificacionAccion)this.cmbClasificacionAccion.getSelectedItem();
             if( tbClasificacionAccion == null){
                 return false;
             }
         }catch( Exception e ){
             return false;
         }

         try{
             tbTipoAccion = (TbTipoAccion)this.cmbTipoAccion.getSelectedItem();
             if( tbTipoAccion == null){
                 return false;
             }
         }catch( Exception e ){
             return false;
         }

        TbTipoAccionClasificacionAccionAreaPK tbTipoAccionClasificacionAccionAreaPK = new TbTipoAccionClasificacionAccionAreaPK();
        tbTipoAccionClasificacionAccionAreaPK.setCodArea( tbArea.getCodArea() );
        tbTipoAccionClasificacionAccionAreaPK.setCodClasificacionAccion( tbClasificacionAccion.getCodClasificacionAccion() );
        tbTipoAccionClasificacionAccionAreaPK.setCodTipoAccion( tbTipoAccion.getCodTipoAccion() );

        tbTipoAccionClasificacionAccionArea = new TbTipoAccionClasificacionAccionArea();
        tbTipoAccionClasificacionAccionArea.setTbArea(tbArea);
        tbTipoAccionClasificacionAccionArea.setTbClasificacionAccion(tbClasificacionAccion);
        tbTipoAccionClasificacionAccionArea.setTbTipoAccion(tbTipoAccion);
        tbTipoAccionClasificacionAccionArea.setTbTipoAccionClasificacionAccionAreaPK(tbTipoAccionClasificacionAccionAreaPK);

        return true;
    }

    private void insertaTipoAccionClasificacionAccionArea( TbTipoAccionClasificacionAccionArea tbTipoAccionClasificacionAccionArea ) throws Exception{
        GestionDelegate.getInstance().insertarTipoAccionClasificacionAccionArea( tbTipoAccionClasificacionAccionArea );
    }

    private void modificaTipoAccionClasificacionAccionArea( TbTipoAccionClasificacionAccionArea tbTipoAccionClasificacionAccionArea ) throws Exception{
        GestionDelegate.getInstance().actualizarTipoAccionClasificacionAccionArea(tbTipoAccionClasificacionAccionArea);
    }

    private class Elimina extends org.jdesktop.application.Task<Object, Void> {
        Elimina(org.jdesktop.application.Application app) {
            super(app);
        }
        @Override protected Object doInBackground() {            
            try {
                setProgress(0, 0, 3);
                setMessage("Preparando para eliminar");
                setProgress(1, 0, 3);
                //entityManager.getTransaction().rollback();
                habilitarBotones( false );
                setMessage("Eliminado en la Base de Datos");
                 try{
                    eliminarTipoAccionClasificacionAccionArea( );
                    Thread.sleep(1000L); // remove for real app
                    setProgress(2, 0, 3);                    
                    Utiles_MensajesDialogo.mensajeExito();
                    setMessage("Refrescar Data");                    
                    Thread.sleep(1300L); // remove for real app
                    setProgress(3, 0, 3);
                    refrescar();
                    inicializarBotones();
                }catch( Exception ex ){
                    ex.printStackTrace();
                    Utiles_MensajesDialogo.mensajeFracaso( "Error" + ex.getMessage() );
                }
                Thread.sleep(50L); // remove for real app

            } catch(InterruptedException ignore) { }


            return null;  // return your result
        }
        @Override protected void succeeded(Object result) {
           
        }
    }

    //Metodos para eliminar
    private void eliminarTipoAccionClasificacionAccionArea( ) throws Exception{

        int[] selected = this.tabla.getSelectedRows();
        List< TableBeanBinding_DatosClasificacionTipoAccionArea> toRemove = new ArrayList<TableBeanBinding_DatosClasificacionTipoAccionArea>(selected.length);
        for (int idx=0; idx<selected.length; idx++) {
            TableBeanBinding_DatosClasificacionTipoAccionArea t = this.listaDatos.get(tabla.convertRowIndexToModel(selected[idx]));

            toRemove.add(t);
            TbArea tbArea =  new  TbArea();
            tbArea.setCodArea( t.getCodArea() );
            tbArea.setDescripcion( t.getDesripcion_Area() );

            TbClasificacionAccion tbClasificacionAccion = new TbClasificacionAccion();
            tbClasificacionAccion.setCodClasificacionAccion( t.getCodClasificacionAccion() );
            tbClasificacionAccion.setDesripcion( t.getDesripcion_ClasificacionAccion() );

            tbTipoAccion =  new TbTipoAccion();
            tbTipoAccion.setCodTipoAccion( t.getCodTipoAccion() );
            tbTipoAccion.setDescripcion( t.getDesripcion_TipoAccion() );

            TbTipoAccionClasificacionAccionAreaPK tbTipoAccionClasificacionAccionAreaPK = new TbTipoAccionClasificacionAccionAreaPK();
            tbTipoAccionClasificacionAccionAreaPK.setCodArea( tbArea.getCodArea() );
            tbTipoAccionClasificacionAccionAreaPK.setCodClasificacionAccion( tbClasificacionAccion.getCodClasificacionAccion() );
            tbTipoAccionClasificacionAccionAreaPK.setCodTipoAccion( tbTipoAccion.getCodTipoAccion() );

            tbTipoAccionClasificacionAccionArea = new TbTipoAccionClasificacionAccionArea();
            tbTipoAccionClasificacionAccionArea.setTbArea(tbArea);
            tbTipoAccionClasificacionAccionArea.setTbClasificacionAccion(tbClasificacionAccion);
            tbTipoAccionClasificacionAccionArea.setTbTipoAccion(tbTipoAccion);
            tbTipoAccionClasificacionAccionArea.setTbTipoAccionClasificacionAccionAreaPK(tbTipoAccionClasificacionAccionAreaPK);

            GestionDelegate.getInstance().eliminarTipoAccionClasificacionAccionArea( tbTipoAccionClasificacionAccionArea );
        }
        listaDatos.removeAll(toRemove);
        setSaveNeeded(true);
    }

    private void refrescar(){
        try{
            //this.codTipoAccionField.setText( tbTipoAccion.getCodTipoAccion().toString() );
            this.limpiarComponentes();
            this.habilitarComponentes(false);
            System.out.println( "paso 1" );            
            this.cargaTabla(tbTipoAccion);
            System.out.println( "paso 2" );
            eventoSeleccionTable();
            System.out.println( "paso 3" );
            
        }catch( Exception ex ){
            System.out.println( "Error:refrescarDatos --> " + ex.getMessage() );
        }
        
    }

    private void inicializarBotones(){
        jp_ope.getBtnNuevo().setEnabled( true );
        jp_ope.getBtnModificar().setEnabled( false );
        jp_ope.getBtnEliminar().setEnabled( false );
        jp_ope.getBtnGuardar().setEnabled( false );
        jp_ope.getBtnDeshacer().setEnabled( false );
        jp_ope.getBtnCerrar().setEnabled( true );
    }

    private void buscarDatos(){
        tbTipoAccion = buscarTipoAccion();
        boolean noexiste = false;
        if( tbTipoAccion == null ){
            noexiste = true;
            Utiles_MensajesDialogo.mensajeError( "Tipo de Acción no existe" );
            tbTipoAccion = null;                                    
        }
        refrescar();
        inicializarBotones();

        if( noexiste && !this.textbuscar.getText().trim().equals( "" ) ){
            habilitarBotones( false );
        }
    }

    private TbTipoAccion buscarTipoAccion() {
        tbTipoAccion = null;
        try{            
            String codtipoAccion = this.textbuscar.getText().trim();
            if( !codtipoAccion.trim().equals( "" ) ){
                tbTipoAccion = GestionDelegate.getInstance().buscarTipoAccion( Integer.parseInt(codtipoAccion) );
            }
        }catch( Exception ex ){
            System.out.println("Error: buscarTipoAccion --> " + ex.getMessage());
        }
        return tbTipoAccion;
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel AreaLabel;
    private javax.swing.JButton btnBuscar;
    private javax.swing.JComboBox cmbArea;
    private javax.swing.JComboBox cmbClasificacionAccion;
    private javax.swing.JComboBox cmbTipoAccion;
    private javax.swing.JLabel codCatAccionLabel;
    private beansbinding.ComboBeanBindingArea comboBeanBindingArea1;
    private beansbinding.ComboBeanBindingTbClasificacionAccion comboBeanBindingTbClasificacionAccion1;
    private beansbinding.ComboBeanBindingTbTipoAccion comboBeanBindingTbTipoAccion1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jp_DatosUsuario;
    private javax.swing.JPanel jp_Operaciones;
    private javax.swing.JLabel logUserLabel1;
    private javax.swing.JScrollPane masterScrollPane;
    private javax.swing.JTable tabla;
    private javax.swing.JTextField textbuscar;
    private javax.swing.JLabel tiempoRptaLimiteLabel1;
    private org.jdesktop.beansbinding.BindingGroup bindingGroup;
    // End of variables declaration//GEN-END:variables
    private JP_Utiles_PanelBotonesMantenimiento jp_ope;
    //private BindingGroup bindingGroup;
    //Datos los cuales van a realizar la persistencia del objeto

    private org.jdesktop.swingbinding.JTableBinding jTableBinding;
    private List<TableBeanBinding_DatosClasificacionTipoAccionArea> listaDatos;
    //private java.util.List<TbUsuario> list;

    private  Timer messageTimer;
    private  Timer busyIconTimer;
    private  Icon idleIcon;
    private final Icon[] busyIcons = new Icon[15];
    private int busyIconIndex = 0;
    private int ind = 0;//0 nuevo 1 actualizar
    private boolean saveNeeded;

    TbTipoAccionClasificacionAccionArea tbTipoAccionClasificacionAccionArea = new TbTipoAccionClasificacionAccionArea();
    TbTipoAccion tbTipoAccion = new TbTipoAccion();
}
